#include "StaticJavaLib.h"
#include "gc.h"
struct BinaryOps{
};

int BinaryOps_add(int a,int b){
  return a + b;
}

int BinaryOps_subtract(int a,int b){
  return a - b;
}

int BinaryOps_multiply(int a,int b){
  return a * b;
}

int BinaryOps_divide(int a,int b){
  return a / b;
}

int BinaryOps_mod(int a,int b){
  return a % b;
}

bool BinaryOps_greaterThan(int a,int b){
  return a > b;
}

bool BinaryOps_greaterThanOrEqual(int a,int b){
  return a >= b;
}

bool BinaryOps_equal(int a,int b){
  return a == b;
}

bool BinaryOps_lessThan(int a,int b){
  return a < b;
}

bool BinaryOps_lessThanOrEqual(int a,int b){
  return a <= b;
}

bool BinaryOps_notEqual(int a,int b){
  return a != b;
}

bool BinaryOps_boolAnd(bool a,bool b){
  return a && b;
}

bool BinaryOps_boolOr(bool a,bool b){
  return a || b;
}

int BinaryOps_shiftLeft(int i,int j){
  return i << j;
}

int BinaryOps_shiftRight(int i,int j){
  return i >> j;
}

int BinaryOps_unsignedShiftRight(int i,int j){
  return ((unsigned)(i)) >> j;
}

void main(int argc,char** argv){
  StaticJavaLib_assertTrue(BinaryOps_add(2,3) == 5);
  StaticJavaLib_assertTrue(BinaryOps_add(2,-3) == -1);
  StaticJavaLib_assertTrue(BinaryOps_add(-2,3) == 1);
  StaticJavaLib_assertTrue(BinaryOps_add(-2,-3) == -5);
  StaticJavaLib_assertTrue(BinaryOps_subtract(2,3) == -1);
  StaticJavaLib_assertTrue(BinaryOps_subtract(2,-3) == 5);
  StaticJavaLib_assertTrue(BinaryOps_subtract(-2,3) == -5);
  StaticJavaLib_assertTrue(BinaryOps_subtract(-2,-3) == 1);
  StaticJavaLib_assertTrue(BinaryOps_multiply(2,3) == 6);
  StaticJavaLib_assertTrue(BinaryOps_multiply(2,-3) == -6);
  StaticJavaLib_assertTrue(BinaryOps_multiply(-2,3) == -6);
  StaticJavaLib_assertTrue(BinaryOps_multiply(-2,-3) == 6);
  StaticJavaLib_assertTrue(BinaryOps_divide(2,3) == 0);
  StaticJavaLib_assertTrue(BinaryOps_divide(2,-3) == 0);
  StaticJavaLib_assertTrue(BinaryOps_divide(-2,3) == 0);
  StaticJavaLib_assertTrue(BinaryOps_divide(-2,-3) == 0);
  StaticJavaLib_assertTrue(BinaryOps_divide(3,2) == 1);
  StaticJavaLib_assertTrue(BinaryOps_divide(3,-2) == -1);
  StaticJavaLib_assertTrue(BinaryOps_divide(-3,2) == -1);
  StaticJavaLib_assertTrue(BinaryOps_divide(-3,-2) == 1);
  StaticJavaLib_assertTrue(BinaryOps_mod(2,3) == 2);
  StaticJavaLib_assertTrue(BinaryOps_mod(2,-3) == 2);
  StaticJavaLib_assertTrue(BinaryOps_mod(-2,3) == -2);
  StaticJavaLib_assertTrue(BinaryOps_mod(-2,-3) == -2);
  StaticJavaLib_assertTrue(BinaryOps_mod(3,2) == 1);
  StaticJavaLib_assertTrue(BinaryOps_mod(3,-2) == 1);
  StaticJavaLib_assertTrue(BinaryOps_mod(-3,2) == -1);
  StaticJavaLib_assertTrue(BinaryOps_mod(-3,-2) == -1);
  StaticJavaLib_assertTrue(true);
  StaticJavaLib_assertTrue(!false);
  StaticJavaLib_assertTrue(BinaryOps_greaterThan(2,3) == false);
  StaticJavaLib_assertTrue(BinaryOps_greaterThan(3,2) == true);
  StaticJavaLib_assertTrue(BinaryOps_greaterThan(2,2) == false);
  StaticJavaLib_assertTrue(BinaryOps_greaterThanOrEqual(2,3) == false);
  StaticJavaLib_assertTrue(BinaryOps_greaterThanOrEqual(3,2) == true);
  StaticJavaLib_assertTrue(BinaryOps_greaterThanOrEqual(2,2) == true);
  StaticJavaLib_assertTrue(BinaryOps_equal(2,3) == false);
  StaticJavaLib_assertTrue(BinaryOps_equal(3,2) == false);
  StaticJavaLib_assertTrue(BinaryOps_equal(2,2) == true);
  StaticJavaLib_assertTrue(BinaryOps_lessThan(2,3) == true);
  StaticJavaLib_assertTrue(BinaryOps_lessThan(3,2) == false);
  StaticJavaLib_assertTrue(BinaryOps_lessThan(2,2) == false);
  StaticJavaLib_assertTrue(BinaryOps_lessThanOrEqual(2,3) == true);
  StaticJavaLib_assertTrue(BinaryOps_lessThanOrEqual(3,2) == false);
  StaticJavaLib_assertTrue(BinaryOps_lessThanOrEqual(2,2) == true);
  StaticJavaLib_assertTrue(BinaryOps_notEqual(2,3) == true);
  StaticJavaLib_assertTrue(BinaryOps_notEqual(3,2) == true);
  StaticJavaLib_assertTrue(BinaryOps_notEqual(2,2) == false);
  StaticJavaLib_assertTrue(BinaryOps_boolAnd(true,true) == true);
  StaticJavaLib_assertTrue(BinaryOps_boolAnd(true,false) == false);
  StaticJavaLib_assertTrue(BinaryOps_boolAnd(false,true) == false);
  StaticJavaLib_assertTrue(BinaryOps_boolAnd(false,false) == false);
  StaticJavaLib_assertTrue(BinaryOps_boolOr(true,true) == true);
  StaticJavaLib_assertTrue(BinaryOps_boolOr(true,false) == true);
  StaticJavaLib_assertTrue(BinaryOps_boolOr(false,true) == true);
  StaticJavaLib_assertTrue(BinaryOps_boolOr(false,false) == false);
  StaticJavaLib_assertTrue(BinaryOps_shiftLeft(2,1) == 4);
  StaticJavaLib_assertTrue(BinaryOps_shiftLeft(-2,1) == -4);
  StaticJavaLib_assertTrue(BinaryOps_shiftRight(2,1) == 1);
  StaticJavaLib_assertTrue(BinaryOps_shiftRight(-2,1) == -1);
  StaticJavaLib_assertTrue(BinaryOps_unsignedShiftRight(2,1) == 1);
  StaticJavaLib_assertTrue(BinaryOps_unsignedShiftRight(-2,1) == 2147483647);
  gc_recycle();
}
